#  Copyright (c) 2010
#  The Regents of the University of Michigan
#  All Rights Reserved

#  Permission is granted to use, copy, create derivative works, and
#  redistribute this software and such derivative works for any purpose,
#  so long as the name of the University of Michigan is not used in
#  any advertising or publicity pertaining to the use or distribution
#  of this software without specific, written prior authorization. If
#  the above copyright notice or any other identification of the
#  University of Michigan is included in any copy of any portion of
#  this software, then the disclaimer below must also be included.

#  This software is provided as is, without representation or warranty
#  of any kind either express or implied, including without limitation
#  the implied warranties of merchantability, fitness for a particular
#  purpose, or noninfringement.  The Regents of the University of
#  Michigan shall not be liable for any damages, including special,
#  indirect, incidental, or consequential damages, with respect to any
#  claim arising out of or in connection with the use of the software,
#  even if it has been or is hereafter advised of the possibility of
#  such damages.

from mojito_analysis import scan_parser

import matplotlib
matplotlib.use('Agg')
from matplotlib.pyplot import *

import sys
def remove_duplicate_ip_id_pairs(nodes):
  d = {}
  for ip, port, dht_id in nodes:
    d[(ip, dht_id)] = dht_id
  return d.values()

def main(filename, out_filename):
  dht_ids = remove_duplicate_ip_id_pairs(scan_parser.slurp_known_nodes(filename, True))
  frequencies = [0] * 256
  for dht_id in dht_ids:
    if dht_id is not None:
      frequencies[int(dht_id[:2], 16)] += 1
  bar(range(256), frequencies, color='0.7')
  axis(xmin=0, xmax=256)
  xlabel('First byte of DHT ID')
  ylabel('Number of nodes')
  savefig(out_filename)

if __name__ == '__main__':
  main(sys.argv[1], sys.argv[2])
